home *** CD-ROM | disk | FTP | other *** search
- /*******************************************************************
- * Author: Kevin Hawkins
- * Description: Displays two rotating polygons, with one
- * of the polygons having transparency (alpha = 0.6).
- * Pressing the spacebar will switch which polygon is
- * transparent.
- ********************************************************************/
-
- #include <ad709/tinygl/glut.h>
-
- ////// Global Variables
- float angle = 0.0f; // current angle of the rotating triangle
- GLboolean fullScreen = GL_FALSE; // true = fullscreen; false = windowed
- GLboolean keyPressed[256]; // holds true for keys that are pressed
-
- GLboolean leftFirst = GL_TRUE; // true = draw left poly first; false = right first
-
- // Initialize
- // desc: initializes OpenGL
- void Initialize()
- {
- glEnable(GL_BLEND); // enable blending
-
- // transparency
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- glShadeModel(GL_SMOOTH); // use smooth shading
-
- // Clear background to black
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- }
-
- // DrawLeftPoly()
- // desc: draws the left polygon
- void DrawLeftPoly()
- {
- glBegin(GL_QUADS);
- glColor4f(0.8f, 0.9f, 0.7f, 0.6f);
- glVertex3f(-10.0f, -10.0f, 0.0f);
- glColor4f(0.8f, 0.9f, 0.7f, 0.6f);
- glVertex3f(0.0f, -10.0f, 0.0f);
- glColor4f(1, 1, 1, 0.6);
- glVertex3f(0.0f, 10.0f, 0.0f);
- glColor4f(1, 1, 1, 0.6);
- glVertex3f(-10.0f, 10.0f, 0.0f);
- glEnd();
- }
-
- // DrawRightPoly()
- // desc: draws the right polygon
- void DrawRightPoly()
- {
- glBegin(GL_QUADS);
- glColor4f(0.0f, 0.5f, 0.5f, 0.6f);
- glVertex3f(0.0f, -10.0f, 0.0f);
- glColor4f(0.0f, 0.5f, 0.5f, 0.6f);
- glVertex3f(10.0f, -10.0f, 0.0f);
- glColor4f(1, 1, 1, 0.6);
- glVertex3f(10.0f, 10.0f, 0.0f);
- glColor4f(1, 1, 1, 0.6);
- glVertex3f(0.0f, 10.0f, 0.0f);
- glEnd();
- }
-
-
- // Render
- // desc: handles drawing of scene
- void Render()
- {
- // clear screen and depth buffer
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
-
- if (angle >= 359.9f)
- angle = 0.0f;
-
- angle += 0.1; // increase rotation angle
-
- glTranslatef(0.0f, 0.0f, -40.0f);
-
- // rotate and draw the opaque polygon
- glPushMatrix();
- glRotatef(angle, 0.0f, 0.0f, 1.0f);
- if (leftFirst)
- DrawLeftPoly();
- else
- DrawRightPoly();
- glPopMatrix();
-
- // rotate and draw the transparent polygon
- glPushMatrix();
- glRotatef(angle, 0.0f, 0.0f, -1.0f);
- if (leftFirst)
- DrawRightPoly();
- else
- DrawLeftPoly();
- glPopMatrix();
-
- glFlush();
- }
-
-
- void resize(int width, int height) {
- glViewport(0, 0, width, height); // reset the viewport to new dimensions
- glMatrixMode(GL_PROJECTION); // set projection matrix current matrix
- glLoadIdentity(); // reset projection matrix
-
- // calculate aspect ratio of window
- gluPerspective(54.0f,(GLfloat)width/(GLfloat)height,1.0f,1000.0f);
-
- glMatrixMode(GL_MODELVIEW); // set modelview matrix
- glLoadIdentity(); // reset modelview matrix
- }
-
-
- void idle() {
- glutPostRedisplay();
- }
-
-
- int main (int argc, char **argv) {
- int glutWindow;
- glutInit(&argc, argv);
- glutInitWindowSize(320, 240);
- glutInitWindowPosition(0, 0);
- glutWindow = glutCreateWindow("OpenGL blend");
- Initialize();
- glutDisplayFunc(Render);
- glutReshapeFunc(resize);
- glutIdleFunc(idle);
- glutMainLoop();
-
-
- return 0;
- }